$(function() {
	// Открываем / закрываем панельку по клику на кнопку
	$('body').on('click', '#multilang_panel_btn_slider', PinenutMultilang.panelButtonClick);
	$('body').on('click', '#multilang_panel_btn_fullsize', PinenutMultilang.maximaizePanel);
	$('body').on('click', '#multilang_panel_btn_minimize', PinenutMultilang.minimizePanel);

	$('body').on('keyup', '[name=filterText]', function () {
		PinenutMultilang.onFilterFormChange();
	});

	$('body').on('change', '[name=filterType]', function () {
		PinenutMultilang.onFilterFormChange();
	});

	$('body').on('click', '.multilang_tabpanel ul[role=tablist]>li', function(){
		var formHash = PinenutMultilang.getFilterFormHash();
		var tabHash =  $(this).attr('data-tab-hash');

		var tabId = $(this).find('a').attr('aria-controls');
		localStorage.setItem('translateTab', tabId);

		if (tabHash != formHash) {
			$(this).attr('data-tab-hash', formHash);
			PinenutMultilang.loadTab(tabId);
		}
	});
});

$(window).load(function() {
	// Отправляем черновик
	$('body').on('submit', 'form.multilang-ajax-form',
		function(e) {
			e.preventDefault();

			var $this = $(this);

			// сериализация массива
			var data = $this.serializeArray();

			// Устанавливаем обработчик формы,
			// исходя из html-аттрибута "action" у формы
			var action = $this.attr('action') ? $this.attr('action')
				: window.location.pathname;

			// Отправляем данные аяксом.
			// При успехе парсим данные,
			// вызываем функцию load() и наполняем ее параметрами
			$.ajax({ 'type' : 'POST', 'url' : action, 'data' : data }).done(
				function(data) {
					PinenutMultilang.sendListRender();
					PinenutMultilang.clearTabsHash();
				}
			);
		}
	);
	
	// Функция для аппрува перевода
	$('body').on('submit', 'form.approve-ajax-form',
		function(e) {
			e.preventDefault();

			var $this = $(this);
			var itemsForApprove = [];

			$('li[data-need-approve=1] a[data-checked="true"]').each(function(k, obj) {
				itemsForApprove[k] = $(this).attr('data-value');
			});
			$('input[name=approveTranslation]').val(itemsForApprove);

			// сериализация массива
			var data = $this.serializeArray();

			// Устанавливаем обработчик формы,
			// исходя из html-аттрибута "action" у формы
			var action = $this.attr('action') ? $this.attr('action')
				: window.location.pathname;

			// Отправляем данные аяксом.
			// При успехе рендерим список переводов
			$.ajax({ 'type' : 'POST', 'url' : action, 'data' : data}).done(
				function(data) {
					PinenutMultilang.sendListRender();
					PinenutMultilang.clearTabsHash();
				}
			);
		}
	);
	
	// Функция для удаления перевода. 
	// ToDo: Из-за сильной схожести с аппрувом можно придумать, 
	// 		 как их склеить в единую универсальную функцию. 
	$('body').on('submit', 'form.delete-ajax-form',
		function(e) {
			e.preventDefault();

			var $this = $(this);
			var itemsForDelete = [];

			$('li[data-delete-marker]').each(function(k, obj) {
				itemsForDelete[k] = $(this).attr('data-item-id');
			});
			$('input[name=deleteTranslation]').val(itemsForDelete);

			// сериализация массива
			var data = $this.serializeArray();

			// Устанавливаем обработчик формы,
			// исходя из html-аттрибута "action" у формы
			var action = $this.attr('action') ? $this.attr('action')
				: window.location.pathname;

			// Отправляем данные аяксом.
			// При успехе снова рендерим список переводов
			$.ajax({ 'type' : 'POST', 'url' : action, 'data' : data}).done(
				function(data) {
					PinenutMultilang.sendListRender();
					PinenutMultilang.clearTabsHash();
				}
			);
		}
	);
});


$('body').on('refreshTranslatePanelItems', function() {
	PinenutMultilang.sendListRender();
	setTimeout(function(){
		removeTabindexFromModal();
	}, 10);
});

$(document).on('click','#checkAll',function(){
	if($(this).is('.checked')) {
		$('a.checkbox-link-item-approve').attr('data-checked', false);
		$('a.checkbox-link-item').removeClass('checked');
	} else {
		$('a.checkbox-link-item-approve').attr('data-checked', true);
		$('a.checkbox-link-item').addClass('checked');
	}
	
	return false;
});

$('body').on('click','a.checkbox-link-item-approve',function(){
	var currentItem = $('a.checkbox-link-item-approve[data-value='+ $(this).attr('data-value') +']');
	if(currentItem.is('.checked')) {
		currentItem.attr('data-checked', false);
		currentItem.removeClass('checked');
	} else {
		currentItem.attr('data-checked', true);
		currentItem.addClass('checked');
	};
	
	return false;
});

$(document).on('click','.multilang_tabpanel a[data-toggle="tab"]',function(){
	if($(this).attr('href') == '#needApproveTab'){
		$('div.clean_copy').show();
	}else{
		$('div.clean_copy').hide();
	}
});

$(document).on('click', 'a.remove-translate-item', function() {
	var item = $(this).parent();

	if(item.is('[data-delete-marker]')) {
		item.removeAttr('data-delete-marker');
	} else {
		item.attr('data-delete-marker', '');
	}
	
	return false;
});

function removeTabindexFromModal()
{
	$('.modal[tabindex]').removeAttr('tabindex');
}

var PinenutMultilang = {
	/**
	 * Список идентификаторов переводимых сущностей, которые присутствуют на странице
	 */
	'collectedEntities' : [],

	/**
	 * Признак того, что панель переводов открыта
	 */
	'panelIsOpen' : false,

	'lastTimeOut' : 0,

	/**
	 * Открываем / Закываем панельку
	 *
	 * @returns {boolean}
	 */
	'panelButtonClick' : function () {

		if(!this.panelIsOpen) {
			// Открыть панель
			this.panelIsOpen = true;
			$(this).parent().stop().animate({right: 0}, 300, function() {
				$('#multilang_panel_btn_slider')
					.removeClass('glyphicon-chevron-left')
					.addClass('glyphicon-chevron-right');

				$('#multilang_panel_btn_fullsize').show();
			});

		} else {
			// Закрыть панель
			this.panelIsOpen = false;
			var $panel = $(this).parents('.multilang_panel');
			
				// Если панель стандартного размера (прижата к правому боку)
				$panel.removeClass('maximazed').stop().animate({right: -35 +'%'}, 300, function() {
					$('#multilang_panel_btn_slider')
						.removeClass('glyphicon-chevron-right')
						.addClass('glyphicon-chevron-left');

					$('#multilang_panel_btn_fullsize').hide();
				});
			
		};

		return false;
	},

	/**
	 * Разворачивает панель на всё окно
	 */
	'maximaizePanel': function(e) {
		e.preventDefault();
		$(this).parents('.multilang_panel').addClass('maximazed');
	},

	/**
	 * Разворачивает панель на всё окно
	 */
	'minimizePanel': function(e) {
		e.preventDefault();
		$(this).parents('.multilang_panel').removeClass('maximazed');
	},

	/**
	 * Пополняет список переводимых сущностей на странице
	 *
	 * @param idList array - список идентификаторов переводимых сущностей
	 */
	'addCollectedEntities' : function (idList) {
		var $this = this;

		// Перебираем все id
		$(idList).each(function (index, entityId) {

			// Если id уже есть в списке - пропускаем его добавление
			if ($.inArray(entityId, $this.collectedEntities) > -1) {
				return;
			}

			// Добавляем id в список переводимых сущностей на странице
			$this.collectedEntities.push(entityId);
		});

		$('body').trigger('refreshTranslatePanelItems');
	},

	'sendListRender' : function () {
		var that = this;

		$.ajax(
			{
				'type' : 'GET',
				'url' :  '~multilang.items',
				'data' : {
					'collectedEntities' : PinenutMultilang.collectedEntities.join()
				}
			}
		).done(
			function(data) {
				$('#multilang_panel_list')
					.empty()
					.append(data);

				var tabId = 'needTranslateTab';
				var savedTab = localStorage.getItem('translateTab');

				if (savedTab) {
					tabId = savedTab;
				}

				$('[aria-controls=' + tabId + ']').click();
				$('#' + tabId).addClass('active');

				if ($('.approve-ajax-form input[type=submit]').length > 0) {
					that.initNeedApproveTab();
				};
			}
		);
	},

	"initNeedApproveTab" : function () {
		$('li[data-need-approve=1]').each(function() {
			var itemId = $(this).attr('data-item-id');
			var checkboxExists = $(this).find('[data-name="need_approve[]"]').attr('data-name');

			if (checkboxExists) {
				return;
			}

			$(this).prepend('<a href="#" class="checkbox-link-item checkbox-link-item-approve" data-name="need_approve[]" data-value="'+ itemId +'" data-checked="false"><span class="check-helper glyphicon glyphicon-ok"></span></a>');
		});
	},
	
	/**
	 * Подгружает конкретный таб
	 *
	 * @param tabId
	 */
	'loadTab' : function (tabId) {
		var that = this;
		var requestTime = Date.now();

		if (tabId == undefined) {
			tabId = $('.multilang_tabpanel li.active').find('a').attr('aria-controls');
		}

		$('#' + tabId).html('<li>loading...</li>');
		$('#' + tabId).attr('data-last-request-time', requestTime);

		$.get('~multilang.panel.tabs',
			{
				'id' : tabId,
				'collectedEntities' : that.collectedEntities.join(','),
				'filterText' : $('[name=filterText]').val(),
				'filterType' : $('[name=filterType]').val()
			},
			function(data){
				var actualRequestTime = $('#' + tabId).attr('data-last-request-time');

				if (actualRequestTime > requestTime) {
					return;
				}

				var liList = $(data).find('li');
				$('#' + tabId).html(liList);
				//$('#' + tabId).addClass('active');
				$('#' + tabId).attr('data-last-request-time', requestTime);

				that.initNeedApproveTab();
			}
		);
	},

	'getFilterFormHash' : function () {
		var code = $('[name=filterText]').val() + $('[name=filterType]').val();

		var output = '';
		if (code.length == 0) {
			return '0';
		}

		for (i = 0; i < code.length; i++) {
			var char = code.charCodeAt(i);
			output += char;
		}

		return output;
	},

	'clearTabsHash' : function () {
		$('.multilang_tabpanel > ul[role=tablist] > li').each(function(){
			$(this).attr('data-tab-hash', 0);
		});
	},

	'onFilterFormChange' : function () {
		var that = this;

		clearTimeout(this.lastTimeOut);
		this.lastTimeOut = setTimeout(function(){
			that.loadTab();
		}, 300);
	}
};